/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Entidad;

import VO.ActividadVO;
import VO.TareaVO;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author David
 */
@Entity
@Table(name = "actividades")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Actividad.findAll", query = "SELECT a FROM Actividad a"),
    @NamedQuery(name = "Actividad.findByIdactividad", query = "SELECT a FROM Actividad a WHERE a.idactividad = :idactividad"),
    @NamedQuery(name = "Actividad.findByNombre", query = "SELECT a FROM Actividad a WHERE a.nombre = :nombre")})
public class Actividad implements Serializable {
    @Basic(optional =     false)
    @NotNull
    @Column(name = "fecha")
    @Temporal(TemporalType.DATE)
    private Date fecha;
    @Basic(optional = false)
    @NotNull
    @Column(name = "duracion")
    private int duracion;
    @Basic(optional = false)
    @NotNull
    @Column(name = "porcentaje")
    private int porcentaje;
    @Column(name = "predecesor")
    private Integer predecesor;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "idactividad")
    private Integer idactividad;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "nombre")
    private String nombre;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idactividad")
    private Collection<Tarea> tareaCollection;
    @JoinColumn(name = "idflujo", referencedColumnName = "idflujos")
    @ManyToOne(optional = false)
    private Flujo idflujo;

    public Actividad() {
    }

    public Actividad(Integer idactividad) {
        this.idactividad = idactividad;
    }

    public Actividad(Integer idactividad, String nombre) {
        this.idactividad = idactividad;
        this.nombre = nombre;
    }

    public Integer getIdactividad() {
        return idactividad;
    }

    public void setIdactividad(Integer idactividad) {
        this.idactividad = idactividad;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @XmlTransient
    public Collection<Tarea> getTareaCollection() {
        return tareaCollection;
    }

    public void setTareaCollection(Collection<Tarea> tareaCollection) {
        this.tareaCollection = tareaCollection;
    }

    public Flujo getIdflujo() {
        return idflujo;
    }

    public void setIdflujo(Flujo idflujo) {
        this.idflujo = idflujo;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idactividad != null ? idactividad.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Actividad)) {
            return false;
        }
        Actividad other = (Actividad) object;
        if ((this.idactividad == null && other.idactividad != null) || (this.idactividad != null && !this.idactividad.equals(other.idactividad))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Entidad.Actividad[ idactividad=" + idactividad + " ]";
    }

    public int getDuracion() {
        return duracion;
    }

    public void setDuracion(int duracion) {
        this.duracion = duracion;
    }

    public int getPorcentaje() {
        return porcentaje;
    }

    public void setPorcentaje(int porcentaje) {
        this.porcentaje = porcentaje;
    }

    public Integer getPredecesor() {
        return predecesor;
    }

    public void setPredecesor(Integer predecesor) {
        this.predecesor = predecesor;
    }

    public ActividadVO toVO() {
        ActividadVO vo = new ActividadVO();
        vo.setIdactividad(idactividad);
        vo.setNombre(nombre);
        vo.setFecha(fecha);
        vo.setDuracion(duracion);
        vo.setPorcentaje(porcentaje);
        vo.setPredecesor(predecesor);
        Iterator itr = getTareaCollection().iterator();
        Collection<TareaVO> ListatareasVo = new ArrayList<TareaVO>();
        TareaVO tareaVo = new TareaVO();
        while(itr.hasNext()) {
             Tarea tarea = (Tarea) itr.next();
             tareaVo = tarea.toVO();
             ListatareasVo.add(tareaVo);
         }
         vo.setTareaCollection(ListatareasVo);
        return vo;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }
    
}
